package com.etc;

import com.alibaba.fastjson.JSONObject;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;

import java.io.IOException;

public class offlinemap extends Mapper<LongWritable, Text,Text, NullWritable> {

    MultipleOutputs<Text,NullWritable> mos = null;//多路输出器
    NullWritable v = null;
    Text k = new Text();

    @Override
    protected void setup(Context context) throws IOException, InterruptedException {
        mos = new MultipleOutputs<Text,NullWritable>(context);
    }

    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String line = value.toString();

        //解析json获取key
        JSONObject jsonObject = JSONObject.parseObject(line).getJSONObject("header");
        //判断数据是否为空
        if (jsonObject.getString("sdk_ver").equals("")){

            return ;
        }
        if (jsonObject.getString("time_zone").equals("")){

             return ;
        }
        //判断os_name是否为ios
        if (jsonObject.getString("os_name").equals("ios")){
            //如果是将device_id赋值给user_id
            jsonObject.put("user_id",jsonObject.getString("device_id"));
        }else {
            //如果不是将android_id赋值给user_id
            jsonObject.put("user_id",jsonObject.getString("android_id"));
        }

        //将json强转为字符串赋值给k
        k.set(jsonObject.toString());

        //判断os_name是否为android
        if("android".equals(jsonObject.getString("os_name"))){
            //如果是将结果输出到android/android文件中
            mos.write(k, v, "android/android");
        }else{
            //如果不是将结果输出到ios/ios文件中
            mos.write(k, v, "ios/ios");
        }

//        将json字符串转为对象
//        offline.HeaderBean headerBean = JSONObject.parseObject(line, offline.class).getHeader();
//
//
//        if (headerBean.getSdk_ver().equals("")){
//            return;
//        }
//
//        if (headerBean.getTime_zone().equals("")){
//            return;
//        }
//        if (headerBean.getCommit_id().equals("")){
//            return;
//        }
//        if (headerBean.getCommit_time().equals("")){
//            return;
//        }
//        if (headerBean.getPid().equals("")){
//            return;
//        }
//        if (headerBean.getApp_token().equals("")){
//            return;
//        }
//        if (headerBean.getApp_id().equals("")){
//            return;
//        }
//        if (headerBean.getDevice_id().equals("")){
//            return;
//        }
//        if (headerBean.getDevice_id_type().equals("")){
//            return;
//        }
//        if (headerBean.getRelease_channel().equals("")){
//            return;
//        }
//        if (headerBean.getApp_ver_name().equals("")){
//            return;
//        }
//        if (headerBean.getApp_ver_code().equals("")){
//            return;
//        }
//        if (headerBean.getOs_name().equals("")){
//            return;
//        }
//        if (headerBean.getOs_ver().equals("")){
//            return;
//        }
//        if (headerBean.getLanguage().equals("")){
//            return;
//        }
//        if (headerBean.getCountry().equals("")){
//            return;
//        }
//        if (headerBean.getManufacture().equals("")){
//            return;
//        }
//        if (headerBean.getDevice_model().equals("")){
//            return;
//        }
//        if (headerBean.getResolution().equals("")){
//            return;
//        }
//        if (headerBean.getNet_type().equals("")){
//            return;
//        }
//
//
//
//        String user_id = "";
//        if (headerBean.getOs_name().equals("android")){
//            user_id = headerBean.getAndroid_id();
//        }else {
//            user_id = headerBean.getDevice_id();
//        }
//

        /**
         * 输出结果
         */

//        headerBean.setUser_id(user_id);
//        k.set(headerBean.toString());
//        if("android".equals(headerBean.getOs_name())){
//            mos.write(k, v, "android/android");
//        }else{
//            mos.write(k, v, "ios/ios");
//        }
    }

    @Override
    protected void cleanup(Context context) throws IOException, InterruptedException {
        mos.close();//关闭多路输出器
    }
}
